"""
Passive Replication
===================

  Introduction
  ------------

  Also known as I{Primary-Backup} is a replication model
  designed for B{fault tolerance}. In this model there is at any one
  time just a single primary replica manager, which we call
  B{Coordinator} and one or more secondary replica managers, which we
  call B{Slaves}.

  The Coordinator will receive a request, execute it and then send
  updated data (not the request!) to Slaves, which will update
  their copy.

  If the Coordinator fails, one Slave will be promoted to its
  place using some algorithm, probably the election one.



  Replication Details
  -------------------

  The sequence of events in this replication model is as follows:

   - B{Request:} Front-End issues a request to Coordinator, it must
     have an unique identifier.

   - B{Coordination:} The Coordinator takes each request atomically,
     in order in which it receives it. It checks if the given request
     was already executed and if so re-send the results.

   - B{Execution:} Coordinator executes the request and store the
     result.

   - B{Agreement:} If the request is an update, coordinator spread the
     updated data, the response and the unique identifier to all
     slaves. Slaves then send an acknowledgment.

   - B{Response:} The primary respondes to the front-end, which hands
     the response back to the client.


  References
  ----------
   - Distributed Systems: Concepts and Design. Coulouris, George et al.


Last Modified: $Id: __init__.py 14 2005-05-17 20:36:03Z gustavo $

@group Passive Replication: coordinator, slave
@group Infrastructure: commands, commandserver
@group Helpers: commandclient

@author: U{Gustavo Sverzut Barbieri <barbieri@gmail.com>}
@license: GNU GPL
@copyright: (C) 2005 Gustavo Sverzut Barbieri
@version: $Rev: 14 $
"""

__all__ = [
    "coordinator",
    "slave",
    ]

__author__  = "Gustavo Sverzut Barbieri <barbieri@gmail.com>"
__url__     = "http://tux08.ltc.ic.unicamp.br/svn/mc705-python/"
__license__ = "GNU GPL"
